● Excel2010・2000でのピボットテーブルのワンクリック自動作成 ~ 現在の表に自動的に名前の定義をして、「ソースの表として行と列が増減しても範囲の再設定が不要にした状態」での、ピボットのワンクリック自動作成

  
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。

  

※一番最後のが一番使いやすいかも?関数化されているので。
 ★ ピボット作成の複数回数の自動化を関数化したもの(2010以降用)

  
目次
 ★ はじめに
 ★ Excel2010用のピボット自動作成(ソース表の行列増減可変)のコード
 ★ Excel2000用のピボット自動作成(ソース表の行列増減可変)のコード

※Shift+TABキー、もしくは、Homeキー、Homeキー+TAB数回、を押すと、目次付近に戻れます。
  
  
★ はじめに
今目の前にある表から、ワンクリックでピボットテーブルの作成ができると大変便利です。

本記事ではそれを可能にするプログラムをご紹介させて頂きたいと思います。
(ピボットが広まらない大きな理由のひとつに、「よくわからない・作るのが面倒」ということがあると思いますのでその解決としてもご利用してほしいと願います。初心者の方ほど、この記事を誰かに読んでもらって、処置してほしいと思います。)

本記事の例では、一応、「今見ている表」が、1シートに1つの表で、かつ、A1セルから横がすべて列名で埋まっている、かつ、空白行・空白列も無い、セル結合も無い、という表に限っています。それでないとプログラムが正常に動きません。
表が「A2セルやB2、B4、C3、・・・・」などから始まっている、つまり、表の上や左に空白行や空白列があるケースは想定していません。

後述のVBAプログラムのコードをPersonal.xlsやxlsbの標準モジュールにコピペして、リボン(またはクイックアクセスツールバーなど)にメニューボタン化します。
そうすると、今見ている表から、「ソースの表の行や列が増減しても範囲の再設定が必要が無いピボットテーブル」がワンクリックで作れるようになります。もちろん、ソースの表がMicrosoft Query(SQL)の抽出結果の表であってもOKです。

メニューボタン化する方法は、「excel クイックアクセスツールバー マクロ 登録」などでGoogle検索してみてください。(リボンへのメニューボタン化・関連の記事5つ→12345。または巻末のリンクで。)

(「Personal.xlsやxlsb」とは、『すべてのExcelファイルで使える共用機能を作るための特殊なExcelファイル』のことです。)
※なお、このコードをリボン(またはクイックアクセスツールバーなど)にメニューボタン化していない場合は、例えばExcel2010の場合なら、開発タブ→マクロ→PERSONAL.XLS!Excel2010_MakePvt01(あるいはPERSONAL.XLS!Excel2k_MakePvt01)などで実行できます。

このコードは、ピボットのソースにしたいシートを開いておき、(一応念のために、)その中のどこでもいいのでどれか1つのセルをクリックしてから実行します。

さささっと(集計による)調べ物をしたいときに便利ですし、無駄な関数やVBAを減らすことにも多少なりとも貢献できると思います。
もちろん、ピボットのソースの表を「=OFFSET($A$1,0,0,COUNTA($A:$A),COUNTA($1:$1))」を使って名前の定義をしておきますので、ピボットのソースの表の側で列や行が増減しても、その範囲の再設定は必要ありません。
(逆に言うと、このピボットを作ったのちに、ソースの表の内容を全く別のものに入れ替えてピボットを更新すれば、フィールドリストの内容も新しいソースの内容が反映されます。)

集計だけでなく、「重複調査」「濁音・破裂音・フリガナの音読み訓読み、スペース、その他の入力ミスの調査」「簡易アンケート調査」等々をしたい時にもさっとやれるので便利です。

なお、名前の定義のときの名前を自由に設定したかったり、さらに新しいシートにどんどんと新しいピボットを作りたい時、あるいは、ピボットを新しいシートではなくて現在のシートに作りたい場合などは、少し作り変えが必要です。でもその部分は「VBAでのピボット作成」のことを知らなくてもでき、特に困難ではありません。なので、もしご自分でできなかったら、ExcelVBAのできる人に作り変えてもらってください。すぐにやってもらえると思います。
(※ちなみにですが、すでに同名の「名前の定義設定」があったとしても、繰り返し実行しても、名前の定義の行ではエラーになりません。同じシート名の新しいシートを作ろうとした行ではエラーになりますけど…。でもそれも、事前に既存のシート名をチェックして、新しいシートではそれ以外のシート名を付けるようにすればOKです。)

2010でとりあえず動きましたが、いつか2000でもテストしてみます。
(2000の場合は、最後の5行はエラーになるかもしれないので、コメントアウトしておいてから試してみます。)
→2018/06/18:テストしてみた結果、ダメでした。2010用のコードのあとに、2000用のコードを追加しておきます。

★ Excel2010用のピボット自動作成(ソース表の行列増減可変)のコード

  
★ Excel2000用のピボット自動作成(ソース表の行列増減可変)のコード
(→逆にこちらは2010でも動きます。当方では動きました。xls・xlsm両方とも)

  
  

★ 2020/06/16 追記:ピボットと名前範囲の名前がダブらないように自動生成するバージョンを作りました。(ただし、2010用です。2013以降も大丈夫な気がします。ダメだったらごめんなさい!2003以前もダメだと思います。)

前述のバージョンは、1つのピボットを作るだけで終わっていました。
2回目の操作で、「すでにその名前はある」みたいなエラーになってしまいます。
なので、そうならないものを作りました。
こちらのものは、同じソースから、複数のピボットを、自動的に名前を変えて(生成して)、それぞれ、自動作成してくれます。
つまり、何度でもボタンを押すと、押した分だけ、エラー無く、ピボットが自動作成できます。
(ただし、リスト形式でない表をソースにするとこれまでと同様、エラーになります。ご自分でもエラーの回避のコードを追加してみて下さい)

※注意!!・・・ピボットの場合はMicrosoftQueryの場合と違って、作成されたピボットを削除しても、ソースの「名前定義」は削除されません。なので、そのまま利用できますが、ただ、不要になった場合が手動で消す必要があります。

  

以下、ピボットの連続自動作成が可能なコード

    
  
  
  
※メニュー関連の記事
Excel2010のリボンに、Excel2000と同じプログラムコードのコピペでユーザー設定ボタンを生成する。(一応ツールバー単位で)
ExcelVBA:WordVBA:他のVBA:ビジネス基礎:VBAプログラム(マクロ)をクイックツールバーにボタンとして組み込む方法
Word2010のリボンに、Word2000と同じプログラムコードのコピペでユーザー設定ボタンを生成する。(一応ツールバー単位で)
Excel2010のリボンに、Excel2000と同じプログラムコードのコピペでユーザー設定ボタンを生成する~02。(一応ツールバー単位で。ピボットテーブル一発作成ボタン等も追加。ドロップダウンでの階層化ボタンも追加。)

  

★ ピボット作成の複数回数の自動化を関数化したもの(2010以降用)